package com.sourcetrip.my;


import com.sourcetrip.my.inter.Set;
import com.sourcetrip.utils.Visitor;

/**
 * @author: ZhouBert
 * @date: 2020/12/22
 * @description: 通过 红黑树实现的集合
 * 分析：
 * 由于遍历方式比较随意，于是随便地采用中序遍历
 * 局限/缺陷：
 * 使用 红黑树 进行比较有个限制，那就是：添加的元素必须具备可比较性！
 * 当添加的元素不具备可比较性，但是同时又需要具备 TreeSet 的性能，该怎么办呢？
 * —— 哈希表！
 */
public class TreeSetByRedBlackTree<E> implements Set<E> {
	private RedBlackTree<E> tree = new RedBlackTree<>();

	@Override
	public int size() {
		return tree.size();
	}

	@Override
	public boolean isEmpty() {
		return tree.isEmpty();
	}

	@Override
	public void clear() {
		tree.clear();
	}

	@Override
	public boolean contains(E element) {
		return tree.contains(element);
	}

	/**
	 * 由于红黑树本身就具有去重地性质，所以直接套即可
	 * @param element
	 */
	@Override
	public void add(E element) {
		tree.add(element);
	}

	@Override
	public void remove(E element) {
		tree.remove(element);
	}

	@Override
	public void traversal(Visitor<E> visitor) {
		tree.inorder(visitor);
	}
}
